﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace Lan_P2P_Messenger
{
    public partial class Form1 : Form
    {
        private static Thread thecoute;
        public delegate void affmessage(string messagetext);
        bool continu = true;
        string version = "1.0.1";
        string createur = "MisterM";

        public Form1()
        {
            InitializeComponent();
            thecoute = new Thread(new ThreadStart(Ecoute));
            thecoute.IsBackground = true;
            thecoute.Start();
            boxrecep.Text = "       => Ecoute";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        public void Ecoute()
        {
            //On crée le serveur en lui spécifiant le port sur lequel il devra écouter.
            UdpClient serveur = new UdpClient(5035);

            //Création d'une boucle infinie qui aura pour tâche d'écouter.
            while (continu == true)
            {
                //Création d'un objet IPEndPoint qui recevra les données du Socket distant.
                IPEndPoint client = null;
                Console.WriteLine("ÉCOUTE...");

                //On écoute jusqu'à recevoir un message.
                byte[] data = serveur.Receive(ref client);
                string expediteur = "       => Envoyée par l'ordinateur : " + client.Address;

                //Décryptage et affichage du message.
                string message = Encoding.Default.GetString(data);
                string messagetext = expediteur + Environment.NewLine + "       Message : " + message;
                Invoke((affmessage)Messag, messagetext);
            }
        }

        public void Messag(string messagetext)
        {
            boxrecep.Text = boxrecep.Text + Environment.NewLine + messagetext;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string mess = message.Text;
            //Sérialisation du message en tableau de bytes.
            byte[] msg = Encoding.Default.GetBytes(mess);
            UdpClient udpClient = new UdpClient();
            //La méthode Send envoie un message UDP.
            udpClient.Send(msg, msg.Length, ip.Text, 5035);
            udpClient.Close();
            message.Text = "";
            boxrecep.Text = boxrecep.Text + Environment.NewLine + "       => Message envoyée";
        }

        private void connexionDuServeurToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
            boxrecep.Text = boxrecep.Text + Environment.NewLine + "     => Reprise de l'écoute";
            thecoute.Resume();
            }
            catch { }
        }

        private void deconectionDuServeurToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                boxrecep.Text = boxrecep.Text + Environment.NewLine + "     => Arret de l'écoute";
                thecoute.Suspend();
            }
            catch { }
        }

        private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void aProposDeLanP2PMessengerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Version : " + version + Environment.NewLine + "Logiciel crée par : " + createur, "A propos de Lan P2P Messenger", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //comit
        }
    }
}
